export const kRoots = {
  Auth: {
    Root: window['YY'] || {},
    Key: 'window.YY.Auth',
    Methods: [
      { key: 'setAccountInfo', args: [String, String, Number, Boolean, Boolean, Boolean], result: '', desc: 'setAccountInfo' },
      { key: 'loginByAccount', args: [String, String], result: '', desc: 'loginByAccount' },
      { key: 'loginByCredit', args: [String, Number], result: '', desc: 'loginByCredit' },
      { key: 'login', args: [], result: '', desc: 'login' },
      { key: 'logout', args: [], result: 'Boolean', desc: 'logout' },
      { key: 'lastAccount', args: [], result: 'String', desc: 'lastAccount' },
      { key: 'accountList', args: [], result: 'String', desc: 'accountList' },
      { key: 'getDeviceInfo', args: [], result: 'String', desc: 'getDeviceInfo' },
      { key: 'removeAccount', args: [String], result: '', desc: 'removeAccount' },
      { key: 'openUrl', args: [String], result: '', desc: 'openUrl' },
      { key: 'setLogoUrl', args: [String], result: '', desc: 'setLogoUrl' },
      { key: 'getUDBTickect', args: [], result: '', desc: 'getUDBTickect' },
      { key: 'getUDBTicketWithContext', args: [String], result: '', desc: 'getUDBTicketWithContext' },
      { key: 'getImStatus', args: [], result: 'Number', desc: 'getImStatus' },
      { key: 'setImStatus', args: [Number], result: '', desc: 'setImStatus' },
      { key: 'refreshSmsCode', args: [], result: '', desc: '刷新短信验证码' },
      { key: 'refreshVerificationCode', args: [], result: '', desc: '刷新验证码' },
      { key: 'verifyCode', args: [Number, String], result: '', desc: '验证验证码' },
      { key: 'isLogined', args: [], result: 'Boolean', desc: '是否已经登录' },
      { key: 'verifyDynamicToken', args: [Number, String], result: '', desc: '验证令牌' }
    ],
    Signals: [
      { key: 'loginSuccess', args: [Boolean], result: '', desc: 'loginSuccess' },
      { key: 'loginError', args: [String, Number, Number], result: '', desc: 'loginError' },
      { key: 'reconnectError', args: [Number, Number, String], result: '', desc: 'reconnectError' },
      { key: 'toBeKicked', args: [Number, String], result: '', desc: 'toBeKicked' },
      { key: 'currentAccountHasLogined', args: [], result: '', desc: 'currentAccountHasLogined' },
      { key: 'UDBLoginEvent', args: [String], result: '', desc: 'UDBLoginEvent 直接透传udb的json' },
      { key: 'UDBSendSMSEvent', args: [String], result: '', desc: 'UDBSendSMSEvent 直接透传udb的json' },
      { key: 'UDBRefreshPicEvent', args: [String], result: '', desc: 'UDBRefreshPicEvent 直接透传udb的json' },
      { key: 'UDBUpdateCreditEvent', args: [String], result: '', desc: 'UDBUpdateCreditEvent 直接透传udb的json' },
      { key: 'udbTicketArrived', args: [String, String], result: '', desc: 'udbTicketArrived' },
      { key: 'firstCallFromJs', args: [String, String], result: '', desc: 'firstCallFromJs' }
    ]
  },
  Audio: {
    Root: window['YY'] || {},
    Key: 'window.YY.Audio',
    Methods: [
      { key: 'getDeviceList', args: [Number], result: 'Array', desc: '获取设备列表，type为1表示输入，2为输出' },
      { key: 'selectDevice', args: [Number, String], result: 'Boolean', desc: '选择当前设备，type为1表示输入，2为输出，uuid标识设备' },
      { key: 'getSelectedDeviceID', args: [Number], result: 'String', desc: '获取当前选中的设备，type为1表示输入，2为输出' },
      { key: 'startMicrophoneWizard', args: [String], result: '', desc: '开始试麦，uuid标识设备' },
      { key: 'stopMicrophoneWizard', args: [], result: '', desc: '结束试麦' },
      { key: 'startSpeakerWizard', args: [String, String], result: '', desc: 'startSpeakerWizard' },
      { key: 'stopSpeakerWizard', args: [], result: '', desc: 'stopSpeakerWizard' }
    ],
    Signals: [
      { key: 'audioDeviceVolumeLevel', args: [Number, Number], result: '', desc: 'audioDeviceVolumeLevel' }
    ]
  },
  Svc: {
    Root: window['YY'] || {},
    Key: 'window.YY.Svc',
    Methods: [
      { key: 'instance', args: [Number], result: 'Object', desc: 'instance' },
      { key: 'isStandby', args: [], result: 'Boolean', desc: 'isStandby' }
    ],
    Signals: [
      { key: 'onSvcStandby', args: [], result: '', desc: 'onSvcStandby' }
    ]
  },
  // Svc: {
  //   Root: window['YY'] || {},
  //   Key: 'window.YY.Svc',
  //   Methods: [
  //     { key: 'createService', args: [], result: 'Boolean', desc: 'createService' },
  //     { key: 'closeService', args: [], result: 'Boolean', desc: 'closeService' },
  //     { key: 'send', args: [String, Number], result: 'Boolean', desc: 'send' },
  //     { key: 'joinGroup', args: [Number, Number], result: 'Boolean', desc: 'joinGroup' },
  //     { key: 'leaveGroup', args: [Number, Number], result: 'Boolean', desc: 'leaveGroup' }
  //   ],
  //   Signals: [
  //     { key: 'onSvcReady', args: [], result: '', desc: 'onSvcReady' },
  //     { key: 'onSvcStatus', args: [Number], result: '', desc: 'onSvcStatus' },
  //     { key: 'onSvcData', args: [String], result: '', desc: 'onSvcData' }
  //   ]
  // },
  Channel: {
    Root: window['YY'] || {},
    Key: 'window.YY.Channel',
    Methods: [
      { key: 'joinChannel', args: [Number, Number, Boolean], result: '', desc: 'joinChannel' },
      { key: 'leaveChannel', args: [], result: 'Boolean', desc: 'leaveChannel' },
      { key: 'channelTree', args: [], result: 'QObject', desc: 'channelTree' },
      { key: 'channelVoice', args: [], result: 'QObject', desc: 'channelVoice' },
      { key: 'getUserCount', args: [], result: 'Number', desc: 'getUserCount' },
      { key: 'isHugeChannelModel', args: [], result: 'Boolean', desc: 'isHugeChannelModel' },
      { key: 'getSubSid', args: [], result: 'Number', desc: 'getSubSid' },
      { key: 'getSid', args: [], result: 'Number', desc: 'getSid' },
      { key: 'getReceptionSid', args: [], result: 'Number', desc: 'getReceptionSid' },
      { key: 'getSubUserCount', args: [Number], result: 'Number', desc: 'getSubUserCount' },
      { key: 'getMyUid', args: [], result: 'Number', desc: 'getMyUid' },
      { key: 'changeCurSubSid', args: [Number, String], result: '', desc: 'changeCurSubSid' },
      { key: 'getPing', args: [], result: 'Number', desc: 'getPing' },
      { key: 'getSpeakerRtt', args: [Number], result: 'Number', desc: 'getSpeakerRtt' },
      { key: 'createSubChannel', args: [Number, String, String], result: '', desc: 'createSubChannel' },
      { key: 'destroySubChannel', args: [Number], result: '', desc: 'destroySubChannel' },
      { key: 'setReceptionSid', args: [Number, Boolean], result: '', desc: 'setReceptionSid' },
      { key: 'sendMsgPublic', args: [String, String, Number, Number], result: '', desc: 'sendMsgPublic' },
      { key: 'sendMsgPrivate', args: [String, Number, String, Number, Number], result: '', desc: 'sendMsgPrivate' },
      { key: 'enableVoice', args: [Number, Boolean], result: '', desc: 'enableVoice' },
      { key: 'enableText', args: [Number, Boolean], result: '', desc: 'enableText' },
      { key: 'kickOutUser', args: [Number, Number, Number, String, Boolean], result: '', desc: 'kickOutUser' },
      { key: 'changeUserRole', args: [Number, Number, Number], result: '', desc: 'changeUserRole' },
      { key: 'changeChannelName', args: [Number, String], result: '', desc: 'changeChannelName' },
      { key: 'changeChannelPassword', args: [Number, String], result: '', desc: 'changeChannelPassword' },
      { key: 'changeChannelStyle', args: [Number, Number], result: '', desc: 'changeChannelStyle FREE = 0,CHAIR = 1' },
      { key: 'changeMemberLimit', args: [Number, Number], result: '', desc: 'changeMemberLimit' },
      { key: 'kickoff', args: [Number, Array], result: '', desc: 'kickoff' },
      { key: 'reJoinSubChannel', args: [Number, String], result: '', desc: 'reJoinSubChannel' },
      { key: 'setTextStatus', args: [Number, Number], result: '', desc: 'setTextStatus 1允许 2禁止 3禁止游客打字' },
      { key: 'ignoreVoice', args: [Number, Boolean], result: '', desc: 'ignoreVoice' },
      { key: 'ignoreText', args: [Number, Boolean], result: '', desc: 'ignoreText' },
      { key: 'setVoiceList', args: [Number, Number, Boolean], result: '', desc: 'setVoiceList' },
      { key: 'getRealNickname', args: [Number], result: 'String', desc: 'getRealNickname 仅用于非YY频道' },
      { key: 'userRow', args: [Number], result: 'Object', desc: 'userRow' },
      { key: 'channelRow', args: [Number], result: 'Object', desc: 'channelRow' },
      { key: 'kickAllOutOf', args: [Number, Number], result: '', desc: 'kickAllOutOf' },
      { key: 'subscribeServiceTypes', args: [Boolean, Number], result: 'Boolean', desc: 'subscribeServiceTypes' }
    ],
    Signals: [
      { key: 'onChannelError', args: [Number, Number, Number], result: '', desc: 'onChannelError' },
      { key: 'onChannelLeaved', args: [Number, Number], result: '', desc: 'onChannelLeaved' },
      { key: 'onChannelJoined', args: [Number, Number], result: '', desc: 'onChannelJoined' },
      { key: 'onAllChannelLoaded', args: [], result: '', desc: 'onAllChannelLoaded' },
      { key: 'onSubChannelChanged', args: [Number], result: '', desc: 'onSubChannelChanged' },
      { key: 'onReceptionIdChanged', args: [Number], result: '', desc: 'onReceptionIdChanged' },
      { key: 'onOtherClientKick', args: [Number, Number], result: '', desc: 'onOtherClientKick' },
      { key: 'onCheckKickoff', args: [Number, Array], result: '', desc: 'onCheckKickoff' },
      { key: 'onJumpSubChannelFail', args: [], result: '', desc: 'onJumpSubChannelFail' },
      { key: 'onJumpSubChannelNeedPassword', args: [Number], result: '', desc: 'onJumpSubChannelNeedPassword' },
      { key: 'onJumpSubChannelNeedCharge', args: [Number, String], result: '', desc: 'onJumpSubChannelNeedCharge' },
      { key: 'onSelfInfoCompleted', args: [], result: '', desc: 'onSelfInfoCompleted' },
      { key: 'onAllUsersLoaded', args: [], result: '', desc: 'onAllUsersLoaded' },
      { key: 'onChatPublic', args: [Object], result: '', desc: 'onChatPublic' },
      { key: 'onChatPrivate', args: [Object], result: '', desc: 'onChatPrivate 暂不用' },
      { key: 'onChatResult', args: [Number], result: '', desc: 'onChatResult' },
      { key: 'onUserRoleChanged', args: [Number, Number, Number, Number, Number], result: '', desc: 'onUserRoleChanged' },
      { key: 'onSubChannelAdd', args: [Number, Number, Number, String], result: '', desc: 'onSubChannelAdd' },
      { key: 'onSubChannelDel', args: [Number, Number, Number, String], result: '', desc: 'onSubChannelDel' },
      { key: 'onSubChannelChangeResult', args: [Number, Number], result: '', desc: 'onSubChannelChangeResult' },
      { key: 'onSubChannelCountExceeded', args: [], result: '', desc: '子频道数量溢出' },
      { key: 'onKickOutChannel', args: [Number, Number, Number, Number, Number, Number, String], result: '', desc: 'onKickOutChannel' },
      { key: 'onVoiceActive', args: [Number, Number, Boolean, Object], result: '', desc: 'onVoiceActive' },
      { key: 'onTextActive', args: [Number, Number, Boolean, Object], result: '', desc: 'onTextActive' },
      { key: 'onAudioEngineInvalid', args: [], result: '', desc: 'onAudioEngineInvalid' },
      { key: 'onChannelVoiceValid', args: [Boolean], result: '', desc: 'onChannelVoiceValid' },
      { key: 'onChannelVoiceCapturing', args: [Boolean], result: '', desc: 'onChannelVoiceCapturing' },
      { key: 'onAudioCodeTypeChanged', args: [Number], result: '', desc: 'onAudioCodeTypeChanged' },
      { key: 'onSessionAudioCodeTypeChanged', args: [Number], result: '', desc: 'onSessionAudioCodeTypeChanged' },
      { key: 'onPermissionChanged', args: [], result: '', desc: 'onPermissionChanged' },
      { key: 'onInputDataVolumeVis', args: [Number], result: '', desc: 'onInputDataVolumeVis' },
      { key: 'onPlaying', args: [Array, Array], result: '', desc: 'onPlaying' },
      { key: 'onPlaonStopPlayying', args: [Number, Object], result: '', desc: 'onStopPlay' },
      { key: 'onSelfTalking', args: [Object], result: '', desc: 'onSelfTalking' },
      { key: 'onSelfStopTalking', args: [Object], result: '', desc: 'onSelfStopTalking' },
      { key: 'onChannelStyleChanged', args: [Number], result: '', desc: 'onChannelStyleChanged' },
      { key: 'onMyInfoChanged', args: [Object], result: '', desc: 'onMyInfoChanged' },
      { key: 'onChannelVoiceList', args: [Object], result: '', desc: 'onChannelVoiceList' },
      { key: 'onChannelVoiceListChanged', args: [Number, Number, Array, Boolean], result: '', desc: 'onChannelVoiceListChanged' }
    ]
  },
  Im: {
    Root: window['YY'] || {},
    Key: 'window.YY.Im',
    Methods: [
      { key: 'getUserInfo', args: [Number], result: 'Object', desc: 'getUserInfo' },
      { key: 'getMyUserInfo', args: [], result: 'Object', desc: 'getMyUserInfo' },
      { key: 'getMyUserId', args: [], result: 'Number', desc: 'getMyUserId' },
      { key: 'setCurrentMessageFont', args: [String, Number, Boolean, Boolean, Boolean, Boolean, Number], result: '', desc: 'setCurrentMessageFont' },
      { key: 'setUserNumber', args: [Number, Number], result: '', desc: 'setUserNumber' },
      { key: 'setUserNick', args: [Number, String], result: '', desc: 'setUserNick' },
      { key: 'setUserLogoUrl', args: [Number, String], result: '', desc: 'setUserLogoUrl' },
      { key: 'updateUserInfoList', args: [Array], result: '', desc: 'updateUserInfoList' },
      { key: 'getServerTime', args: [], result: 'String', desc: 'getServerTime' },
      { key: 'setImStatus', args: [Number], result: '', desc: 'setImStatus 0(在线) 1(隐身) 2(离线) 3(忙碌) 4(离开) 5(游戏)' },
      { key: 'broadcastToBuddyList', args: [String], result: '', desc: 'broadcastToBuddyList' },
      { key: 'setUinfoRequestBatchCount', args: [Number], result: '', desc: '设置每批请求的用户数量' },
      { key: 'getUinfoRequestBatchCount', args: [Number], result: 'Number', desc: 'getUinfoRequestBatchCount' }
    ],
    Signals: [
      { key: 'imLoginChanged', args: [Number], result: '', desc: 'imLoginChanged' },
      { key: 'userInfoChanged', args: [Array], result: '', desc: 'userInfoChanged' },
      { key: 'reqUserInfo', args: [Array], result: '', desc: ' 通知js侧需要获取用户数据, 返回的用户数据通过YY.Im.setUserNumber, YY.Im.serUserNick, YY.Im.serUserLogoUrl更新到C++侧' }
    ]
  },
  Group: {
    Root: window['YY'] || {},
    Key: 'window.YY.Group',
    Methods: [
      { key: 'sendMessage', args: [Number, Number, String], result: '', desc: '触发sendMessageResp 返回值为timestamp' },
      { key: 'getMessage', args: [Number, Number, String], result: 'Object', desc: 'getMessage' },
      { key: 'getFoldersInGroup', args: [Number], result: 'Array', desc: 'getFoldersInGroup' },
      { key: 'getFolderInfo', args: [Number, Number], result: 'Object', desc: 'getFolderInfo' },
      { key: 'getMemberListInGroup', args: [Number], result: '', desc: 'getMemberListInGroup' },
      { key: 'getMemberCount', args: [Number, Number], result: 'Number', desc: 'getMemberCount' },
      { key: 'isGroupExists', args: [Number], result: 'Boolean', desc: 'isGroupExists' },
      { key: 'isFolderExists', args: [Number, Number], result: 'Boolean', desc: 'isFolderExists' },
      { key: 'getGroups', args: [], result: 'Array', desc: 'getGroups' },
      { key: 'createMemberView', args: [Number, Number], result: 'Object', desc: 'createMemberView' },
      { key: 'getLatestMessage', args: [Number, Number, Number], result: 'Array', desc: 'getLatestMessage' },
      { key: 'getMessagesNear', args: [Number, Number, String, Number], result: 'Boolean', desc: 'getMessagesNear' },
      { key: 'reportRead', args: [Number, Number], result: 'Boolean', desc: 'reportRead' },
      { key: 'createGroupMessageView', args: [Number, Number], result: 'Object', desc: 'createGroupMessageView' },
      { key: 'withdrawMessage', args: [Number, Number, String], result: '', desc: 'withdrawMessage' },
      { key: 'withdrawMessageAdmin', args: [Number, Number, String, Number], result: '', desc: 'withdrawMessageAdmin' },
      { key: 'getUserRole', args: [Number, Number], result: '', desc: 'getUserRole' },
      { key: 'getFolderCreator', args: [Number], result: 'Object', desc: 'getFolderCreator' },
      { key: 'deleteFolder', args: [Number, Number], result: '', desc: 'deleteFolder' },
      { key: 'renameFolder', args: [Number, Number, String], result: '', desc: 'renameFolder' },
      { key: 'setGroupAdmin', args: [Number, Number], result: '', desc: 'setGroupAdmin' },
      { key: 'depriveGroupAdmin', args: [Number, Number], result: '', desc: 'depriveGroupAdmin' },
      { key: 'kickGroupFolderMember', args: [Number, Number, Number], result: '', desc: 'kickGroupFolderMember' },
      { key: 'forbidSpeak', args: [Number, Number, Number], result: '', desc: 'forbidSpeak' },
      { key: 'allowSpeak', args: [Number, Number, Number], result: '', desc: 'allowSpeak' },
      { key: 'hasForbidSpeak', args: [Number, Number, Number], result: 'Boolean', desc: 'hasForbidSpeak' },
      { key: 'setGroupFolderTopicMode', args: [Number, Number, Number], result: '', desc: 'setGroupFolderTopicMode' },
      { key: 'searchGroupMember', args: [Number, Number, Number, String], result: '', desc: 'searchGroupMember' },
      { key: 'searchGroupList', args: [String], result: '', desc: 'searchGroupList' },
      { key: 'joinGroup', args: [Number, Number], result: '', desc: '加入群' },
      { key: 'broadcast', args: [Number], result: '', desc: '向自己所在的所有群成员广播自己信息变化' },
      { key: 'getGroupInfo', args: [Number], result: 'Object', desc: '查询群属性' }
    ],
    Signals: [
      { key: 'chatMessageRecieved', args: [Number, Number, Object], result: '', desc: 'chatMessageRecieved' },
      { key: 'sendMessageResp', args: [Number, Number, String, String, Boolean], result: '', desc: 'sendMessageResp' },
      { key: 'groupListAdded', args: [Array], result: '', desc: 'groupListAdded' },
      { key: 'groupListRemoved', args: [Array], result: '', desc: 'groupListRemoved' },
      { key: 'groupInfoChanged', args: [Number, Object], result: '', desc: 'groupInfoChanged' },
      { key: 'folderInfoChanged', args: [Number, Number, Object], result: '', desc: 'folderInfoChanged' },
      { key: 'folderListAdded', args: [Number, Array], result: '', desc: 'folderListAdded' },
      { key: 'folderListRemoved', args: [Number, Array], result: '', desc: 'folderListRemoved' },
      { key: 'foldersResponsed', args: [Number, Array], result: '', desc: 'foldersResponsed' },
      { key: 'groupFolderRoleChanged', args: [Number, Number, Array], result: '', desc: 'groupFolderRoleChanged' },
      { key: 'groupFolderForbiddenChanged', args: [Number, Number, Array], result: '', desc: 'groupFolderForbiddenChanged' },
      { key: 'membersAdded', args: [Number, Number], result: '', desc: 'membersAdded' },
      { key: 'membersCountChanged', args: [Number, Number, Number], result: '', desc: 'membersCountChanged' },
      { key: 'unreadMessageCount', args: [Number, Number, Number, Number], result: '', desc: 'unreadMessageCount' },
      { key: 'groupMembersSearchFinished', args: [Number, Number, String, Array], result: '', desc: 'groupMembersSearchFinished' },
      { key: 'groupListSearchFinished', args: [String, Array], result: '', desc: 'groupListSearchFinished' },
      { key: 'messageWithdrawn', args: [Number, Number, Number, String], result: '', desc: 'messageWithdrawn' },
      { key: 'messageWithdrawResp', args: [Number, Number, String, Number], result: '', desc: 'messageWithdrawResp' },
      { key: 'messageWithdrawnAdmin', args: [Number, Number, Number, String, Number], result: '', desc: 'messageWithdrawnAdmin' },
      { key: 'messageWithdrawAdminResp', args: [Number, Number, String, Number], result: '', desc: 'messageWithdrawAdminResp' },
      { key: 'systemActionsGroupDismissed', args: [Number, String, Number, String, Number], result: '', desc: 'systemActionsGroupDismissed' },
      { key: 'systemActionsAdminAdded', args: [Number, Number, Number, Number, Number, Number], result: '', desc: 'systemActionsAdminAdded' },
      { key: 'systemActionsAdminRemoved', args: [Number, Number, Number, Number, Number, Number], result: '', desc: 'systemActionsAdminRemoved' }
    ]
  },
  Common: {
    Root: window['YY'] || {},
    Key: 'window.YY.Common',
    Methods: [
      { key: 'trayIcon', args: [], result: 'Object', desc: 'trayIcon' },
      { key: 'hotKey', args: [], result: 'Object', desc: 'hotKey' },
      { key: 'print', args: [Number, Number], result: '', desc: 'print' },
      { key: 'syncRoamConfig', args: [], result: '', desc: 'syncRoamConfig' },
      { key: 'keywordManager', args: [], result: 'Object', desc: 'keywordManager' },
      { key: 'setClipboardText', args: [String], result: 'Number', desc: 'setClipboardText' },
      { key: 'getClipboardText', args: [], result: 'String', desc: 'getClipboardText' },
      { key: 'setAutoRun', args: [Boolean], result: '', desc: 'setAutoRun' },
      { key: 'isAutoRun', args: [], result: 'Boolean', desc: 'isAutoRun' },
      { key: 'switchToLogin', args: [String], result: '', desc: 'switchToLogin' },
      { key: 'distributor', args: [], result: 'String', desc: '渠道' },
      { key: 'machineUuid', args: [], result: 'String', desc: 'machineUuid' },
      { key: 'transfer', args: [String, String, String, String], result: '', desc: 'transfer' },
      { key: 'navigateWithProxy', args: [String, String], result: '', desc: 'navigateWithProxy' },
      { key: 'takeSnapshot', args: [Number], result: 'Object', desc: 'takeSnapshot' }
    ],
    Signals: [
      { key: 'onGetCfgRes', args: [String], result: '', desc: 'onGetCfgRes' },
      { key: 'dataTransfered', args: [String, String, String, String], result: '', desc: 'dataTransfered' }
    ]
  },
  sdk: {
    Root: window['YY'] || {},
    Key: 'window.YY.sdk',
    Methods: [
      { key: 'killOthers', args: [], result: '', desc: 'killOthers' },
      { key: 'navigate', args: [String, Array], result: '', desc: 'navigate' },
      { key: 'doUpdate', args: [], result: '', desc: 'doUpdate' }
    ],
    Signals: [
      { key: 'updateReady', args: [], result: '', desc: 'updateReady' }
    ]
  },
  GameMgr: {
    Root: window['YY'] || {},
    Key: 'window.YY.GameMgr',
    Methods: [
      { key: 'loadDriver', args: [], result: 'Boolean', desc: 'loadDriver' },
      { key: 'unLoadDriver', args: [], result: 'Boolean', desc: 'unLoadDriver' },
      { key: 'getData', args: [String], result: 'String', desc: 'getData' }
    ],
    Signals: [

    ]
  },
  Win: {
    Root: window || {},
    Key: 'window.Win',
    Methods: [
      { key: 'align', args: [Number], result: '', desc: 'align' },
      { key: 'move', args: [Number, Number], result: '', desc: 'move' },
      { key: 'resize', args: [Number, Number], result: '', desc: 'resize' },
      { key: 'setRect', args: [Number, Number, Number, Number], result: '', desc: 'setRect' },
      { key: 'setMinSize', args: [Number, Number], result: '', desc: 'setMinSize' },
      { key: 'maximize', args: [], result: '', desc: 'maximize' },
      { key: 'minimize', args: [], result: '', desc: 'minimize' },
      { key: 'restore', args: [], result: '', desc: 'restore' },
      { key: 'close', args: [], result: '', desc: 'close' },
      { key: 'show', args: [], result: '', desc: 'show' },
      { key: 'hide', args: [], result: '', desc: 'hide' },
      { key: 'setNCBorderWidth', args: [Number], result: '', desc: 'setNCBorderWidth' },
      { key: 'setCaptionArea', args: [Array], result: '', desc: 'setCaptionArea' },
      { key: 'addStyle', args: [Number], result: '', desc: 'addStyle' },
      { key: 'removeStyle', args: [Number], result: '', desc: 'removeStyle' },
      { key: 'setStyle', args: [Number], result: '', desc: 'setStyle' },
      { key: 'bringToFront', args: [], result: '', desc: 'bringToFront' }
    ],
    Signals: [

    ]
  }
}

export const kWinHints = {
  kDefaultHint: 0,
  kFramelessHint: 1,
  kResizableHint: 2,
  kInTaskbarHint: 4,
  kShadowHint: 8,
  kTopMostHint: 16,
  kLayeredHint: 32
}
